package Day_0218.JavaPackage;

/**
 * @author zxc
 * @date 2023/02/18 20:45
 **/
public class BIO_NIO_AIO {
    public static void main(String[] args) {
        /**
         * 谈一谈对于BIO,NIO和AIO之间的联系
         * ===》
         * 一，BIO
         * ===》BIO：Block IO 同步阻塞式 IO，就是我们平常使用的传统 IO，它的特点是模式简单使用方便，并发处理能力低。
         * BIO (Blocking I/O):
         * （1）同步阻塞I/O模式，数据的读取写入必须阻塞在一个线程内等待其完成。
         * （2）在活动连接数不是特别高（小于单机1000）的情况下，这种模型是比较不错的，
         *  可以让每一个连接专注于自己的 I/O && 编程模型简单，也不用过多考虑系统的过载、限流等问题。
         * （3）线程池本身就是一个天然的漏斗，可以缓冲一些系统处理不了的连接或请求。
         *  但是，当面对十万甚至百万级连接的时候，传统的 BIO 模型是无能为力的。
         *  因此，我们需要一种更高效的 I/O 处理模型来应对更高的并发量。
         *
         * 二，NIO
         * ===》NIO：Non IO 同步非阻塞 IO，是传统 IO 的升级，客户端和服务器端通过 Channel（通道）通讯，实现了多路复用。
         * NIO (New I/O):
         * （1）NIO是，一种同步非阻塞的I/O模型，
         *  在Java 1.4 中，引入了NIO框架，对应 java.nio包，提供了 Channel , Selector，Buffer等抽象。
         *  NIO中的N可以理解为Non-blocking，不单纯是New。
         * （2）它支持面向缓冲的，基于通道（channel）的I/O操作方法。
         *  NIO提供了与传统BIO模型中的 Socket 和ServerSocket 相对应的 SocketChannel 和 ServerSocketChannel 两种不同的套接字通道实现,两种通道都支持阻塞和非阻塞两种模式。
         * （3）阻塞模式使用，就像传统中的支持一样，比较简单，但是性能和可靠性都不好；
         *  非阻塞模式正好与之相反。
         *  对于低负载、低并发的应用程序，可以使用同步阻塞I/O来提升开发速率和更好的维护性；
         *  对于高负载、高并发的（网络）应用，应使用 NIO 的非阻塞模式来开发
         *
         * 三，AIO
         * ===》AIO：Asynchronous IO 是 NIO 的升级，也叫 NIO2，实现了异步非堵塞 IO ，异步 IO 的操作基于事件和回调机制。
         * AIO (Asynchronous I/O):
         * （1）AIO 也就是 NIO 2。在 Java 7 中引入了 NIO 的改进版 NIO 2,它是异步非阻塞的IO模型。
         * （2）异步 IO 是基于事件和回调机制实现的，也就是应用操作之后会直接返回，
         *  不会堵塞在那里，当后台处理完成，操作系统会通知相应的线程进行后续的操作。
         * （3）AIO 是异步IO的缩写，虽然 NIO 在网络操作中，提供了非阻塞的方法，但是 NIO 的 IO 行为，还是同步的。
         * （4）对于 NIO来说，业务线程是在 IO 操作准备好时，得到通知，
         *  接着，就由这个线程自行进行 IO 操作，IO操作本身是同步的。
         *
         *
         */
    }
}
